# -*- coding:utf-8 -*-

# author: firstoney
# email: devops_yj@163.com

# 使用models API
# 导入Board类
from boards.models import Board

# 创建新的board对象
board = Board(name='django',description='This is a board about django')
# 将board这个对象保存在数据库中,调用save方法.
board.save()

# save方法用于创建和更新对象. 第一次创建一个新对象,board实例没有id,保存之后,会自动设置ID.
print(board.id)

# 将其他字段当做Python属性访问:
print(board.name)
print(board.description)

# 更新一个值
board.description = 'Django decription board'
board.save()

# 直接创建一个新的Board对象
board = Board.objects.create(name='Python',description='General description about Python')

print(board.id)
print(board.name)
print(board.description)

# 使用objects列出数据库中所有现有的版块.
print(Board.objects.all())
# 结果是一个QuerySet,它是从数据库中查询的对象列表,有两个对象,但显示的名称是 Board object. 这是因为我们尚未实现Board的 __str__ 方法。
# __str__ 方法是对象的字符串表示形式。

# 输出结果: <QuerySet [<Board: Board object>, <Board: Board object>]>

'''
在models.py的Board类中添加:
    # __str__ 方法是对象的字符串表示形式。也就是通过属性objects可以访问模型管理器,模型管理器用于数据库操作.
    def __str__(self):
        return self.name
'''

# 重新查看:
print(Board.objects.all())
# 可以将QuerySet看做一个列表,遍历它并打印每个版块的描述:
boards_list = Board.objects.all()
for board in boards_list:
    print(board.description)

'''
输出结果:
Django decription board
General description about Python
'''  

# 使用模型的 管理器(Manager) 来查询数据库并返回单个对象,使用get方法:
django_board = Board.objects.get(id=1)
print(django_board.name)
print(django_board.description)

'''
注意: 查找一个不存在的对象时,会引发异常.
    例如: boards.models.DoesNotExist: Board matching query does not exist.

get 方法的参数可以是模型的任何字段,但最好使用可唯一标识对象的字段
来查询。否则,查询可能会返回多个对象,这也会导致异常

请注意,查询区分大小写.
'''






